﻿using StudentInfoSystem.Core.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using StudentInfoSystem.Core.Models.Enums;

namespace StudentInfoSystem.Core.Interfaces;
// 添加导出格式枚举
public enum ExportFormat
{
    SQLite,
    SQLServer,
    MySQL,
    CSV,
    JSON
}

/// <summary>
/// 学生信息业务接口
/// 底层调用SQLite，来实现数据的增删改查
/// </summary>
public interface IStudentService
{
    // 保存所有学生信息，需要知道文件路径，因为保存的只可能是当前打开的文件数据
    void SaveStudents();

    // 加载所有学生信息，需要知道文件路径
    void LoadStudents(string filePath);

    // 删除所有学生信息，也需要知道文件路径
    void DeleteStudents(string filePath);

    /// <summary>
    /// 导出数据库为指定格式
    /// </summary>
    /// <param name="filePath">导出文件路径</param>
    /// <param name="format">导出格式</param>
    void ExportDatabase(string filePath, ExportFormat format);

    /// <summary>
    /// 获取所有学生信息
    /// </summary>
    /// <returns></returns>
    List<Student> GetAll();


    // 获取指定id的学生信息，可能为Null
    Student? GetById(string studentId);

    /// <summary>
    /// 添加学生信息
    /// </summary>
    void Add(Student student);

    /// <summary>
    /// 更新学生信息
    /// </summary>
    void Update(Student student);
    /// <summary>
    /// 删除学生信息
    /// </summary>
    /// <param name="studentId"></param>
    void Delete(string studentId);

    /// <summary>
    /// 查询
    /// </summary>
    /// <param name="criteria"></param>
    /// <returns></returns>
    void Search(SearchCriteria criteria);

    /// <summary>
    /// 排序
    /// </summary>
    /// <param name="sortOption"></param>
    /// <returns></returns>
    void Sort(SortOption sortOption,bool isUp);


    /// <summary>
    /// 获取过滤后的所有学生信息，呈现的就是筛选后的数据
    /// </summary>
    /// <returns></returns>
    IEnumerable<Student> GetAllFiltered();
}
